今天是第四天,從基本型態開始講吧,與大部分語言一樣有基礎的int
、float
、string
,在此之上Go還有complex
、array
、slice
、map
、channel
等進階型態,再來都會談到。
沒特別指定類別的話,宣告會是基礎型態int
、unit
,以電腦位元數決定是32還64
資料型別 | 下限 | 上限 |
---|---|---|
unit8 | 0 | 255 |
unit16 | 0 | 65535 |
unit32 | 0 | 4294967295 |
unit64 | 0 | 18446744073709551615 |
unit |
可以看出最大值是2^n-1
資料型別 | 下限 | 上限 |
---|---|---|
int8 | -128 | 127 |
int16 | -32768 | 32767 |
int32 | -2147483648 | 2147483647 |
int64 | -9223372036854775808 | 9223372036854775807 |
int |
這邊的話下限是-2^(n-1)
,上限是 2^(n-1)-1
有小數的數字,分為float32
及float64
資料型別 | 標準 | 最大值 |
---|---|---|
float32 | IEEE-754 32 位元 | 3.4e38 |
float64 | IEEE-754 64 位元 | 1.8e308 |
IEEE二進位浮點數算術標準(IEEE 754)是20世紀80年代以來最廣泛使用的浮點數運算標準,為許多CPU與浮點運算器所採用。
分true與false,預設為false
var a bool
fmt.Println(a) // false
b := true
fmt.Println(b) // true
string
正常狀況下使用的型別,通常不會使用其他兩種
rune
一種int32
的類型,一個值代表一個Unicode
碼
byte
一種unit8
的類型,一個值代表一個ASCII
碼
在大部分情形下,都是使用 string
型別,這篇文章對string與byte有很詳細的講解,想深入了解的話可以讀一下。
複數包涵兩種型態 complex64
、complex128
。有以下兩種宣告方法
c1 := complex(10, 11) // constructor init
c2 := 10 + 11i // complex number init syntax
不同型別的資料有時會需要互相轉換,但直接交換有時會出錯或喪失精準度,轉換格式如下type(變數)
// 宣告一個16位元整數,轉成8位元時發生截斷,因為8位元整數最大值是127
var a int16 = 128
fmt.Printf("%d \n", int8(a)) //-128
// 將浮點數轉成整數,會損失小數點後的精度
var b float32 = math.Pi
fmt.Printf("%d \n", int(b)) //3
Go格式化輸出中有%T
可以查看該變數型別,另外也有unsafe.Sizeof()
可以觀看占用的記憶體大小,下面為簡單範例
var a int8 = 30
fmt.Printf("int8 長度= %d byte, 型態= %T", unsafe.Sizeof(a), a)
//int8 長度= 1 byte, 型態= int8
var b int32 = 30
fmt.Printf("int32 長度= %d byte, 型態= %T", unsafe.Sizeof(b), b)
//int8 長度= 4 byte, 型態= int32
[Golang] 程式設計教學:資料型態 (Data Type):
https://opensourcedoc.com/golang-programming/data-type/
day4 - 基本型別:
https://ithelp.ithome.com.tw/articles/10214468
徹底弄清Golang中[]byte與string轉換
https://www.gushiciku.cn/pl/pDSl/zh-tw